package sx2018.neworiginal;

import java.util.Scanner;

/**
 * 订餐管理
 */
public class Restaurant {
 
	Scanner input = new Scanner(System.in);
	// 创建订单对象
	OrderingSet[] oSet = new OrderingSet[4];
	// 创建吃饭菜单对象
	MenuSet[] mSet = new MenuSet[3];

	Restaurant() {
		// 初始化第1条订单信息
		oSet[0] = new OrderingSet();
		oSet[0].names = "张晴";
		oSet[0].dishMegs = "红烧带鱼 2份";
		oSet[0].times = 12;
		oSet[0].addresses = "天成路207号";
		oSet[0].sumPrices = 76.0;
		oSet[0].states = 1;

		// 初始化第2条订单信息
		oSet[1] = new OrderingSet();
		oSet[1].names = "张晴";
		oSet[1].dishMegs = "鱼香肉丝 2份";
		oSet[1].times = 18;
		oSet[1].addresses = "天成路207号";
		oSet[1].sumPrices = 20.0;
		oSet[1].states = 0;

		// 初始化吃饭菜单
		mSet[0] = new MenuSet();
		mSet[0].dishNames = "红烧带鱼";
		mSet[0].prices = 38.0;
		mSet[0].praiseNums = 0;

		mSet[1] = new MenuSet();
		mSet[1].dishNames = "鱼香肉丝";
		mSet[1].prices = 20.0;
		mSet[1].praiseNums = 0;

		mSet[2] = new MenuSet();
		mSet[2].dishNames = "时令鲜蔬";
		mSet[2].prices = 10.0;
		mSet[2].praiseNums = 0;
	}

	public static void main(String[] args) {
		Restaurant om = new Restaurant();
		om.startMenu();
	}

	public void startMenu() {

		int num = -1; // 用户输入0返回主菜单，否则退出系统
		boolean isExit = false; // 标志用户是否退出系统： true:退出系统

		System.out.println("\n欢迎使用“吃货联盟订餐系统”");
		// 循环：显示菜单，根据用户选择的数字执行相应功能
		do {
			// 显示菜单
			System.out.println("****************************");
			System.out.println("1、我要订餐");
			System.out.println("2、查看餐袋");
			System.out.println("3、签收订单");
			System.out.println("4、删除订单");
			System.out.println("5、我要点赞");
			System.out.println("6、退出系统");
			System.out.println("****************************");
			System.out.print("请选择：");
			int choose = input.nextInt(); // 记录用户选择的功能编号

			// 根据用户选择的功能编号执行相应功能
			switch (choose) {
			case 1:
				// 我要订餐
				System.out.println("***我要订餐***");
				add();
				break;
			case 2:
				// 查看餐袋
				System.out.println("***查看餐袋***");
				display();
				break;
			case 3:
				// 签收订单
				System.out.println("***签收订单***");
				sign();
				break;
			case 4:
				// 删除订单
				System.out.println("***删除订单***");
				delete();
				break;
			case 5:
				// 我要点赞
				System.out.println("***我要点赞***");
				praise();
				break;
			case 6:
				// 退出系统
				isExit = true;
				break;
			default:
				// 退出系统
				isExit = true;
				break;
			}
			if (!isExit) {
				System.out.print("输入0返回：");
				num = input.nextInt();
			} else {
				break;
			}
		} while (num == 0);

		System.out.println("谢谢使用，欢迎下次光临！");
	}

	boolean add() {
		boolean isAdd = false; // 记录是否可以订餐

		for (int j = 0; j < oSet.length; j++) {
			if (oSet[j] == null) { // 找到第一个空位置，可以添加订单信息
				isAdd = true; // 置标志位，可以订餐
				System.out.print("请输入订餐人姓名：");
				String name = input.next();
				// 显示供选择的菜品信息
				System.out.println("序号" + "\t" + "菜名" + "\t" + "单价" + "\t" + "点赞数");
				for (int i = 0; i < mSet.length; i++) {
					String price = mSet[i].prices + "元";
					String priaiseNum = (mSet[i].praiseNums > 0 ? mSet[i].praiseNums + "赞" : "0");
					System.out.println((i + 1) + "\t" + mSet[i].dishNames + "\t" + price + "\t" + priaiseNum);
				}
				// 用户点菜
				System.out.print("请选择您要点的菜品编号:");
				int chooseDish = input.nextInt();
				System.out.print("请选择您需要的份数:");
				int number = input.nextInt();
				String dishMeg = mSet[chooseDish - 1].dishNames + " " + number + "份";
				double sumPrice = mSet[chooseDish - 1].prices * number;
				// 餐费满50元，免送餐费5元
				double deliCharge = 0;
				if (sumPrice < 50)
					deliCharge = 5;

				System.out.print("请输入送餐时间（送餐时间是10点至20点间整点送餐）:");
				int time = input.nextInt();
				while (time < 10 || time > 20) {
					System.out.print("您的输入有误，请输入10~20间的整数！");
					time = input.nextInt();
				}
				System.out.print("请输入送餐地址：");
				String address = input.next();

				// 无需添加状态，默认是0，即已预定状态。
				System.out.println("订餐成功！");
				System.out.println("您订的是：" + dishMeg);
				System.out.println("送餐时间：" + time + "时");
				System.out.println("餐费：" + sumPrice + "元，送餐费" + deliCharge + "元，总计：" + (sumPrice + deliCharge) + "元。");

				// 添加数据
				oSet[j] = new OrderingSet();
				oSet[j].names = name;
				oSet[j].dishMegs = dishMeg;
				oSet[j].times = time;
				oSet[j].addresses = address;
				oSet[j].sumPrices = sumPrice + deliCharge;
				break;
			}
		}
		if (!isAdd) {
			System.out.println("对不起，您的餐袋已满！");
			return false;
		} else {
			return true;
		}
	}

	void display() {
		System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t送餐地址\t\t总金额\t订单状态");
		for (int i = 0; i < oSet.length; i++) {
			if (oSet[i] != null) {
				String state = (oSet[i].states == 0) ? "已预定" : "已完成";
				String date = oSet[i].times + "时";
				String sumPrice = oSet[i].sumPrices + "元";
				System.out.println((i + 1) + "\t" + oSet[i].names + "\t" + oSet[i].dishMegs + "\t" + date + "\t"
						+ oSet[i].addresses + "\t" + sumPrice + "\t" + state);

			}
		}
	}

	void sign() {
		boolean isSignFind = false; // 找到要签收的订单

		System.out.print("请选择要签收的订单序号：");
		int signOrderId = input.nextInt();
		for (int i = 0; i < oSet.length; i++) {
			// 状态为已预定，序号为用户输入的订单序号：可签收
			// 状态为已完成，序号为用户输入的订单序号：不可签收
			if (oSet[i] != null && oSet[i].states == 0 && signOrderId == i + 1) {
				oSet[i].states = 1; // 将状态值置为已完成
				System.out.println("订单签收成功！");
				isSignFind = true;
			} else if (oSet[i] != null && oSet[i].states == 1 && signOrderId == i + 1) {
				System.out.println("您选择的订单已完成签收，不能再次签收！");
				isSignFind = true;
			}
		}
		// 未找到的订单序号：不可签收
		if (!isSignFind) {
			System.out.println("您选择的订单不存在！");
		}

	}

	void delete() {
		boolean isDelFind = false; // 找到要删除的订单

		System.out.print("请输入要删除的订单序号:");
		int delId = input.nextInt();
		for (int i = 0; i < oSet.length; i++) {
			// 状态值为已完成 序号值为用户输入的序号：可删除
			// 状态值为已预定 序号值为用户输入的序号：不可删除
			if (oSet[i] != null && oSet[i].states == 1 && delId == i + 1) {
				isDelFind = true;
				// 执行删除操作:删除位置后的元素依次前移
				for (int j = delId - 1; j < oSet.length - 1; j++) {
					oSet[j] = oSet[j + 1];
				}
				// 最后一位清空
				int nu = oSet.length - 1;
				oSet[nu] = null;
				System.out.println("删除订单成功！");
				break;
			} else if (oSet[i] != null && oSet[i].states == 0 && delId == i + 1) {
				System.out.println("您选择的订单未签收，不能删除！");
				isDelFind = true;
				break;
			}
		}

		// 未找到该序号的订单：不能删除
		if (!isDelFind) {
			System.out.println("您要删除的订单不存在！");
		}
	}

	void praise() {
		// 显示菜品信息
		System.out.println("序号 \t菜名  \t单价  \t点赞数");
		for (int i = 0; i < mSet.length; i++) {
			String price = mSet[i].prices + "元";
			String praiseNum;
			if (mSet[i].praiseNums > 0)
				praiseNum = mSet[i].praiseNums + "赞";
			else
				praiseNum = "";

			System.out.println((i + 1) + "\t" + mSet[i].dishNames + "\t" + price + "\t" + praiseNum);
		}
		int priaiseNum;
		do {
			System.out.print("请选择您要点赞的菜品序号：");
			priaiseNum = input.nextInt();
		} while (priaiseNum <= 0 || priaiseNum > mSet.length);
		mSet[priaiseNum - 1].praiseNums++; // 赞数加1
		System.out.println("点赞成功！");
	}
}